package com.xb.loan.fund.service;


import com.xb.loan.fund.service.bean.*;
import com.xb.loan.fund.service.bean.*;
import com.xb.loan.log.exception.BizException;

import java.util.List;
import java.util.Map;

/**
 * 资金管理接口
 */
public interface ICashChargeService {
	
    /**
     * 充值
     * @param cashChargeVO  充值订单T_Cash_Charge
     * @return 
     * @throws BizException
     */
    public ChargeApplyVO charge(CashChargeVO cashChargeVO) throws BizException;
    
    /**
     * 重新支付，若是在线支付购彩，可以只传orderId字段；若是单独的充值订单，只穿chargeId字段。
     * @param cashChargeVO  充值订单T_Cash_Charge
     * @return
     * 2015年8月30日 by wuqinglong
     */
    public ChargeApplyVO reCharge(CashChargeVO cashChargeVO) throws BizException;
    
    /**
     * 充值结果
     * @param chargeResultVO
     * @throws BizException
     */
    public void chargeResult(ChargeResultVO chargeResultVO) throws BizException;

    /**
     * 清除某天充值的对账结果，以便重复对账
     * @param accountPeriod
     */
    public void clearAccountStatus(String accountPeriod);
    
    /**
     * 修改充值订单的对账状态
     * @param chargeId
     * @param accountStatus
     * @return
     * @throws BizException
     * 2016年6月14日 by wenju.song
     */
    public int updateAccountStatus(String chargeId, int accountStatus) throws BizException;

    /**
     * 按天，分渠道统计充值信息
     * @return
     * 2015年12月23日 by wenju.song
     */
    List<Map<String,Object>> statChargeDay(Map<String, Object> params);
    
    /**
     * 
     * 查询用户充值信息列表
     * @param userId 用户ID
     * @param payChannelType 支付渠道类型
     * @param status 支付状态
     * @param partnerId 渠道ID
     * @param startDate 充值开始时间
     * @param endDate 充值结束时间
     * @param pageNum 页数
     * @param numPerPage 每页的行数
     * @return
     * @throws BizException
     */
    public List<CashChargeVO> queryChargeOrder(String userId, Integer payChannelType, Integer status,
                                               String partnerId, String startDate, String endDate,
                                               int pageNum, int numPerPage) throws BizException;
    /**
     *
     * 查询用户充值信息数量
     * @param userId 用户ID
     * @param payChannelType 支付渠道类型
     * @param status 支付状态
     * @param partnerId 渠道ID
     * @param startDate 充值开始时间
     * @param endDate 充值结束时间
     * @return
     * @throws BizException
     */
    public int queryChargeOrderCount(String userId, Integer payChannelType, Integer status,
                                     String partnerId, String startDate, String endDate) throws BizException;

    public CashChargeVO queryCashChargeById(String chargeId) throws BizException;

    public CashChargeVO queryCashChargeByPid(String partnerId, String pid) throws BizException;

    /**
     * 查询符合条件的充值订单（不分页）
     * @param accountPeriod
     * @param accountStatus
     * @param status
     * @return
     */
    public List<CashChargeVO> queryAllCashCharge(String accountPeriod, Integer accountStatus, Integer status);

    /**
     * 统计各个渠道下的用户充值额
     * @param statTime
     * @return
     */
    public List<StatUserChargeVO> queryStatUserCharge(String statTime);

    /**
     * 查询用户还有未完成充值的订单笔数
     * @param accountId
     * @return
     * @throws BizException
     */
    public int queryCashChargeTmpByAccountId(String accountId) throws BizException;

    /**
     * 按用户类型时间查询用户充值
     */
    public List<CashChargeRecVO> queryCashChargeRec(Integer userType, String startTime, String endTime,
                                                    int pageNum, int numPerPage) throws BizException;

    /**
     * 按用户类型时间查询用户充值总记录数
     */
    public int queryCashChargeRecCount(Integer userType, String startTime, String endTime) throws BizException;

}
